Skip to content

Commit 17ccae7

Browse files
authored
Merge pull request #63 from tobinus/rewrite-why-the-fork-#61
Rewrite parts of "Why the fork?", closes #61
2 parents 23585fd + 2f8438c commit 17ccae7

File tree

1 file changed

+16
-34
lines changed

1 file changed

+16
-34
lines changed

doc/user/fork.rst

Lines changed: 16 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ to skip to :doc:`basic_usage_guide/part_1`.
1515
Inspiration
1616
-----------
1717

18-
The reason I felt like making such drastic changes, is that the original library is
19-
**exceptionally hard to learn** and use. Error messages would not tell you what was wrong,
20-
the concept of extensions is poorly explained and the methods are a bit weird, in that
21-
they function as getters and setters at the same time. The fact that you have three
22-
separate ways to go about setting multi-value variables is also a bit confusing.
18+
The python-feedgen_ project is alright for creating general RSS and ATOM feeds,
19+
especially in situations where you'd like to serve the same content in those two
20+
formats. However, I wanted to create podcasts, and found myself struggling with
21+
getting the library to do what I wanted to do, and I frequently found myself
22+
looking at the source to understand what was going on.
2323

24-
Perhaps the biggest problem, though, is the awkwardness that stems from enabling
24+
Perhaps the biggest problem is the awkwardness that stems from enabling
2525
RSS and ATOM feeds through the same API. In case you don't know, ATOM is a
2626
competitor to RSS, and has many more capabilities than RSS. However, it is
2727
not used for podcasting. The result of mixing both ATOM and RSS include methods that will map an ATOM value to
@@ -30,10 +30,10 @@ the value of the RSS property ``copyright``) and some differ in subtle ways (lik
3030
(ATOM) ``logo`` versus (RSS) ``image``). Other methods are more complex (see ``link``). They're all
3131
confusing, though, since changing one property automatically changes another implicitly.
3232
They also cause bugs, since it is so difficult to wrap your head around how one
33-
interact with another.
34-
Removing ATOM support fixes all these issues.
33+
interact with another. This is the inspiration for forking python-feedgen_ and
34+
rewrite the API, without mixing the different standards.
3535

36-
Even then, python-feedgen_ aims at being comprehensive, and gives you a one-to-one
36+
Futhermore, python-feedgen_ gives you a one-to-one
3737
mapping to the resulting XML elements. This means that you must
3838
learn the RSS and podcast standards, which include many legacy elements you
3939
don't really need. For example, the original RSS spec
@@ -45,30 +45,12 @@ I believe **the API should help guide the users** by hiding the legacy image tag
4545
and you as a user shouldn't need to know all this. You just need to know that the
4646
image must be larger than 1400x1400 pixels, not the history behind everything.
4747

48-
Alignment with the philosophies
49-
-------------------------------
50-
51-
python-feedgen_'s code breaks all the philosophies listed in the :doc:`introduction`:
52-
53-
#. Beautiful is better than ugly, yet all properties are set through hybrid
54-
setter/getter methods.
55-
#. Explicit is better than implicit, yet changing one property will cause
56-
changes to other properties implicitly.
57-
#. Simple is better than complex, yet creating podcasts requires that you
58-
load an extension, and somehow figure out that this extension's methods
59-
are available as methods of the extension's name, which suddenly is
60-
available as a property of your FeedGenerator object.
61-
#. Complex is better than complicated, yet an entire framework is built to
62-
handle extensions, rather than using class inheritance. (Said framework
63-
even requires that the extension resides inside a specific folder!)
64-
#. Readability counts, yet classes are named after their function and not what
65-
they represent, and (again) properties are set through methods.
66-
67-
In short, the **original project breaks all the idioms listed in Philosophy**, and
68-
fixing it would require changes too big or too dramatic to be applied upstream.
69-
70-
Whenever a change *is* appropriate for upstream, however, we should strive to
71-
bring it there, so it can benefit **everyone**.
48+
Forking a project gives you a lot of freedom, since you don't have to support
49+
any old behaviour. python-feedgen_ cannot make backwards incompatible changes,
50+
since many projects around the earth rely on the way the library works, and you
51+
cannot expect everyone to use ``pip freeze`` (you should, though!). Whenever a
52+
change *is* appropriate for python-feedgen_, however, we should strive to bring
53+
it there so it can benefit as many as possible :)
7254

7355

7456
Summary of changes
@@ -111,7 +93,7 @@ The following list is not exhaustive.
11193
* :attr:`.Podcast.explicit` is now required, and is :obj:`bool`.
11294
* Add shorthand for generating the RSS: Just try to converting your :class:`~podgen.Podcast`
11395
object to :obj:`str`!
114-
* Improve the documentation (as you've surely noticed).
96+
* Expand the documentation (as you've surely noticed).
11597
* Move away from the extension framework, and rely on class inheritance instead.
11698

11799
.. _python-feedgen: https://github.com/lkiesow/python-feedgen

0 commit comments

Comments
 (0)